﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Extensions;
using ConfExpert.Utility;
using System.IO;
using DevExpress.XtraBars;
using DevExpress.Utils;

namespace Tailord
{
    public partial class ManuelKumasSiparisi : XPopupForm
    {
        int OrderId;
        DataTable dtDistinctUretici;
        public ManuelKumasSiparisi(int OrderId)
        {
            InitializeComponent();
            this.OrderId = OrderId;
        }
        
        private void KumasIhtiyaci_Load(object sender, EventArgs e)
        {
            ShowOnlyBar();          

            lblHeader.Caption = "Sipariş No. " + OrderId.ToString();

            gvIhtiyac.Init("GetEkstraKumasIhtiyaci", OrderId);
            gvIhtiyac.SutunEkle("KalanIhtiyac", typeof(decimal));

            gvIhtiyac.FormatAsNumber(2, "AkfilStok", "KalanIhtiyac");
            gvIhtiyac.YanYanaGetir("KalanIhtiyac:KumasIhtiyaci");
            gvIhtiyac.MakeColumnInvisible("KumasYeri", "KumasId", "AkfilStok", "MontiStok", "StokMetraj");
            gvIhtiyac.AddSummary("KumasIhtiyaci", "KalanIhtiyac");
            gvIhtiyac.SetCaptions("KalanIhtiyac:SiparisMetraji");

            gvIhtiyac.MakeReadOnly("KalanIhtiyac");

            bbiSave.ItemClick += bbiSave_ItemClick;
            gvIhtiyac.RowStyle += gvIhtiyac_RowStyle;
            gvIhtiyac.RowCellStyle += gvIhtiyac_RowCellStyle;
            gvIhtiyac.BestFitColumns();
        }

        void gvIhtiyac_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            if (e.RowHandle>-1)
            {
                switch (e.Column.FieldName)
                {
                    case "KalanIhtiyac":
                        e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                        e.Appearance.BackColor = Color.Yellow;
                        break;
                }
            }
        }

        void gvIhtiyac_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                string message = gvIhtiyac.GetRowCellValue(e.RowHandle, "SiparisDurumu").ToString();
                if (message.ToLower() == "verilmedi")
                    e.Appearance.BackColor = Color.Gainsboro;
                else if (message.ToLower().Contains("verildi"))
                    e.Appearance.BackColor = Color.DarkSeaGreen;
                else if (message.ToLower().Contains("kısmen"))
                    e.Appearance.BackColor = Color.LightGoldenrodYellow;
            }
        }
        
        void bbiSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gvIhtiyac.CloseEditor();
            gvIhtiyac.UpdateCurrentRow();
            DataRow[] drIhtiyac = gvIhtiyac.DataTable().Select("Isnull(KalanIhtiyac,0) > 0");
            if (drIhtiyac.Length==0)
            {
                XtraMessageBox.Show("Sipariş vermek istediğiniz kumaşların ihtiyaç metrajını girin !");
                return;
            }

            DataTable dtIhtiyac = drIhtiyac.CopyToDataTable();
            dtIhtiyac.TableName = "Table";

            DataRow[] drBosLokasyon = dtIhtiyac.Select("Isnull(KumasYeri,'') = ''");
            if (drBosLokasyon.Length > 0)
            {
                if (drBosLokasyon.Length == dtIhtiyac.Rows.Count)
                {
                    XtraMessageBox.Show("Sipariş vermek istediğiniz kumaşların lokasyon bilgisi girilmemiş. Bu kumaşların lokasyon bilgisini KUMAŞ ekranından doldurun !");
                    return;
                }

                else
                {
                    if (XtraMessageBox.Show("İhtiyacınız olan kumaşlardan lokasyonu belli olmayan kumaşlar var. Kalan kumaşlar için tedarik emri verilsin mi", "Critical", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
                        return;
                    foreach (DataRow drHata in drBosLokasyon)
                    {
                        dtIhtiyac.Rows.Remove(drHata);
                    }
                }
            }

            DataRow[] drEksikKumaslar = dtIhtiyac.Select("(KumasYeri = 'Akfil' and Isnull(KalanIhtiyac,0) > Isnull(AkfilStok,0))  or "+ 
                                                         "(KumasYeri = 'DESTEX' and Isnull(KalanIhtiyac,0) > Isnull(MontiStok,0)) or "+
                                                         "(KumasYeri = 'TAILORD' and Isnull(KalanIhtiyac,0) > Isnull(StokMetraj,0))");

            if (drEksikKumaslar.Length>0 && dtIhtiyac.Rows.Count==drEksikKumaslar.Length)
            {
                XtraMessageBox.Show("İhtiyacınız olan kumaş miktarı stoklarınızda yok !");
                return;
            }

            if (drEksikKumaslar.Length>0)
            {
                if (XtraMessageBox.Show("İhtiyacınız olan kumaşlardan bazıları stoklarınızda yok. Kalan kumaşlar için tedarik emri verilsin mi", "Critical", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
                    return;
                foreach (DataRow drHata in drEksikKumaslar)
                {
                    dtIhtiyac.Rows.Remove(drHata);
                }                
            }

            dtDistinctUretici = dtIhtiyac.DefaultView.ToTable(true, "KumasYeri");
            int UserId = AppSession.UserInfo.UserId;
            string xml = XML.SerializeAll(dtIhtiyac);

            foreach (DataRow dr in dtDistinctUretici.Rows)
            {
                string KumasYeri = dr["KumasYeri"].ToString();

                DataSet dsFoy = AppSession.DataManager.ExecuteDataSet("GetEkstraKumasSiparisFoy", OrderId, UserId, KumasYeri, "", xml);
                Reports.KumasSiparisFoyu ks = new Reports.KumasSiparisFoyu(dsFoy);
                MemoryStream ms = new MemoryStream();
                ks.ExportToPdf(ms);
                byte[] foyPdf = ms.ToArray();

                DataSet dsCikisEmri;
                string cikisEmriId = "";
                if (KumasYeri == "AKFİL")
                {
                    dsCikisEmri = AppSession.DataManager.ExecuteDataSet("InsCikisEmriAtConfexpert", OrderId, xml);
                    foreach (DataTable tbCikis in dsCikisEmri.Tables)
                    {
                        cikisEmriId += tbCikis.Rows[0][0].ToStringNN() + ",";
                    }
                    cikisEmriId = cikisEmriId.RemoveIfEndsWith(",");
                }
                else if (KumasYeri == "DESTEX")
                {
                    AppSession.DataManager.ExecuteDataSet("InsDestexKumasSiparis", OrderId, xml);
                }

                using (ceMessenger.ceMessengerSoapClient messenger = new ceMessenger.ceMessengerSoapClient())
                {
                    string username = "ce";
                    string password = "ce";
                    string reportName = "Tailord." + OrderId.ToString() + "_KumasSiparisFoyu.pdf";
                    string from = "Tailord";
                    string subject = "SiparişNo." + OrderId.ToString() + " Kumaş Siparişi";
                    string message = OrderId.ToString() + " numaralı sipariş için istenen kumaşlar ektedir.<br><br>Lütfen teslim tarihini bildiriniz.";
                    if (cikisEmriId != "")
                        message += "<br><br>" + cikisEmriId.ToString() + " nolu  çıkış emri/emirleri ile bu kumaşları Tailord'a gönderiniz  ";
                    string to = "";
                    string cc = "";

                    foreach (DataRow drMail in dsFoy.Tables[2].Rows)
                    {
                        string senderType=drMail["SenderType"].ToStringNN();
                        string Mail=drMail["Mail"].ToStringNN();

                        if (senderType == "To")
                            to += Mail + ",";
                        else
                            cc += Mail + ",";
                    }

                    to = to.RemoveIfEndsWith(",");
                    cc = cc.RemoveIfEndsWith(",");
                    if (to=="")
                    {
                        XtraMessageBox.Show(KumasYeri + " için herhangi bir mail tanımlanmamış. Lütfen Tedarikçi Mailleri formundan mail adresi tanımı yapın");
                        return;
                    }

                    messenger.SendEmailWithAttachmentFileName(username, password, from, to,cc, subject, message, foyPdf, reportName);
                }
            }
            ExecQuery("UpdKumasSiparisofOrderK", OrderId, false,xml,UserId);
            this.DialogResult = DialogResult.OK;
        }
    }
}